home *** CD-ROM | disk | FTP | other *** search
-
- tmplistgraph: dc.l 0
-
- OrderZones:
-
- move.l ListOfGraphRooms,a0
- ; a0=list of rooms to draw.
-
- move.l a0,tmplistgraph
-
- move.l #ToDrawTab,a1
- move.l #WorkSpace,a4
- move.l a1,a3
-
- moveq #99,d0
- moveq #0,d1
- .clrtab:
- move.l d1,(a1)+
- dbra d0,.clrtab
-
- move.l a0,a1
- move.l #OrderTab,a5
-
- settodraw:
- move.w (a1),d0
- blt.s nomoreset
-
- st (a3,d0.w)
- move.l 4(a1),(a4,d0.w*4)
-
- adda.w #8,a1
- bra.s settodraw
-
- dummy: dc.w 0
-
- nomoreset:
-
- ; We now have a table with $ff rep.
- ; a room to be drawn at some stage.
-
- move.l tmplistgraph,a0
- move.l #OrderTab,a2
- moveq #0,d0
- moveq #2,d1
-
- putinn:
- move.w (a0),d2
- blt putallin
- move.l ZoneGraphAdds,a1
- move.l (a1,d2.w*4),a1
- add.l LEVELGRAPHICS,a1
- addq #8,a2
-
- move.w d2,2(a2)
- move.w d0,(a2)
- move.w d1,4(a2)
- addq #1,d0
- addq #1,d1
-
- adda.w #8,a0
- bra putinn
-
- putallin:
-
- move.w #-1,4(a2)
-
- move.w #1,OrderTab+4
- move.w #-1,OrderTab
- move.w #-1,OrderTab+2
- move.w #2,d5 ; off end of list.
-
- move.w #100,d7 ; which ones to look
- ; at.
-
- move.l a2,a5
- ; clr.b farendfound
-
- RunThroughList:
-
- move.l FloorLines,a1
-
- move.w 2(a5),d0
- move.l #WorkSpace,a6
- lea (a6,d0.w*4),a6
- move.l (a6),d6
- move.l ZoneAdds,a0
- move.l (a0,d0.w*4),a0
- add.l LEVELDATA,a0
-
- adda.w ToExitList(a0),a0
-
- move.l a5,a4
- ; tst.b farendfound
- ; bne.s nochangeit
- ; move.l a5,farendpt
- ;nochangeit:
-
- move.w (a5),d0
- blt doneallthispass
-
- move.l #OrderTab,a5
- lea (a5,d0.w*8),a5
- ; clr.b donesomething
- bsr InsertList
-
- dbra d7,RunThroughList
-
- doneallthispass:
-
- dontorder:
-
- move.l #OrderTab,a5
- move.w 4(a5),d0
- lea (a5,d0.w*8),a5
-
- move.l #FinalOrder,a0
- showorder:
- move.w 2(a5),(a0)+
- move.w 4(a5),d0
- blt.s doneorder
- move.l #OrderTab,a5
- lea (a5,d0.w*8),a5
- bra showorder
-
- doneorder:
-
- move.l a0,endoflist
-
- ; move.w d7,TempBuffer
-
- rts
-
- farendfound: dc.b 0
- donesomething: dc.b 0
- farendpt: dc.l 0
-
- InsertList
- move.l d7,-(a7)
- moveq #0,d7
-
- InsertLoop
-
- move.w (a0)+,d0 ; floor line
- blt allinlist
- asl.w #4,d0
- ; tst.l 8(a1,d0.w)
- ; beq.s InsertLoop
- moveq #0,d1
- move.w 8(a1,d0.w),d1
- blt.s buggergerger
-
- btst d7,d6
- bne indrawlist
- buggergerger:
- addq #3,d7
- bra InsertLoop
- indrawlist
- addq #1,d7
-
- btst d7,d6
- bne.s wealreadyknow
-
-
- ; Here is a room in the draw list.
- ; We want to find if it is closer than
- ; this one.
- ; Find out if it is further away
- ; or closer than the current zone.
-
- bset d7,d6
-
- move.w xoff,d2
- move.w zoff,d3
- sub.w (a1,d0.w),d2
- sub.w 2(a1,d0.w),d3
- muls 6(a1,d0.w),d2
- muls 4(a1,d0.w),d3
- addq #1,d7
- sub.l d3,d2
- ble PutDone
- bset d7,d6
- bra mustdo
-
- wealreadyknow:
- addq #1,d7
- btst d7,d6
- beq PutDone
-
- *****************************
- * If this connected zone is supposed
- * to be closer, then ignore it
-
- mustdo:
-
- * The connected zone is supposed to
- * be further away, so if it is closer
- * then we need to move to other side
- * of it.
-
- move.l #OrderTab,a3
-
- move.w (a4),d0
- blt.s notcloser
-
- checkcloser:
- cmp.w 2(a3,d0.w*8),d1
- beq.s iscloser
-
- move.w (a3,d0.w*8),d0
- bge.s checkcloser
- bra notcloser
-
- iscloser:
-
- st donesomething
-
- * The zone which is further away is
- * for some reason in the closer part
- * of the list. We therefore want to
- * move in front of it. a3,d0.w*8 points
- * to the incorrect one.
-
- move.w (a4),d2
- move.w 4(a3,d2.w*8),d5 ; this place
- move.w 4(a4),d3
- blt.s fromend
-
- move.w d2,(a3,d3.w*8)
-
- fromend:
-
- move.w d3,4(a3,d2.w*8)
-
- move.w (a3,d0.w*8),d2
- move.w 4(a3,d2.w*8),d4
-
- move.w d2,(a3,d5.w*8)
- move.w d4,4(a3,d5.w*8)
- move.w d5,(a3,d4.w*8)
- move.w d5,4(a3,d2.w*8)
-
- notcloser:
-
- PutDone:
- addq #1,d7
-
- notindrawlist:
-
- bra InsertLoop
-
- allinlist:
-
- move.l d6,(a6)
- move.l (a7)+,d7
- ; tst.b donesomething
- ; bne.s notfoundend
- ; st farendfound
- ;notfoundend:
-
- rts
-
- endoflist: dc.l 0
- ToDrawTab:
- ds.l 400
- OrderTab: ds.l 400
- dc.w -1
- FinalOrder: ds.l 400
- doneone: dc.w 0